<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Configuring the memory pool</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
    <link rel="up" href="mp.html" title="Chapter 20.  The Memory Pool Subsystem" />
    <link rel="prev" href="mp.html" title="Chapter 20.  The Memory Pool Subsystem" />
    <link rel="next" href="mp_warm.html" title="Warming the memory pool" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.2</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Configuring the memory pool</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="mp.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 20.  The Memory Pool Subsystem </th>
          <td width="20%" align="right"> <a accesskey="n" href="mp_warm.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="mp_config"></a>Configuring the memory pool</h2>
          </div>
        </div>
      </div>
      <p>
        There are two issues to consider when configuring the memory
        pool.
    </p>
      <p>
        The first issue, the most important tuning parameter for
        Berkeley DB applications, is the size of the memory pool.
        There are two ways to specify the pool size. First, calling
        the <a href="../api_reference/C/envset_cachesize.html" class="olink">DB_ENV-&gt;set_cachesize()</a> method specifies the pool size for all
        of the applications sharing the Berkeley DB environment.
        Second, the <a href="../api_reference/C/dbset_cachesize.html" class="olink">DB-&gt;set_cachesize()</a> method only specifies a pool
        size for the specific database. Note: It is meaningless to
        call <a href="../api_reference/C/dbset_cachesize.html" class="olink">DB-&gt;set_cachesize()</a> for a database opened inside of a
        Berkeley DB environment because the environment pool size will
        override any pool size specified for a single database. For
        information on tuning the Berkeley DB cache size, see <a class="xref" href="general_am_conf.html#am_conf_cachesize" title="Selecting a cache size">Selecting a cache size</a>.
    </p>
      <p>
        Note the memory pool defaults to assuming that the average
        page size is 4k. This factor is used to determine the size of
        the hash table used to locate pages in the memory pool. The
        size of the hash table is calculated to so that on average 2.5
        pages will be in each hash table entry. Each page requires a
        mutex be allocated to it and the average page size is used to
        determine the number of mutexes to allocate to the memory
        pool. 
    </p>
      <p>
        Normally you should see good results by using the default
        values for the page size, but in some cases you may be able to
        achieve better performance by manually configuring the page
        size. The expected page size, hash table size and mutex count
        can be set via the methods: <a href="../api_reference/C/envset_mp_pagesize.html" class="olink">DB_ENV-&gt;set_mp_pagesize()</a>,
        <a href="../api_reference/C/envset_mp_tablesize.html" class="olink">DB_ENV-&gt;set_mp_tablesize()</a>, and <a href="../api_reference/C/envset_mp_mtxcount.html" class="olink">DB_ENV-&gt;set_mp_mtxcount()</a>.
    </p>
      <p>
        The second memory pool configuration issue is the maximum
        size an underlying file can be and still be mapped into the
        process address space (instead of reading the file's pages
        into the cache). Mapping files into the process address space
        can result in better performance because available virtual
        memory is often much larger than the local cache, and page
        faults are faster than page copying on many systems. However,
        in the presence of limited virtual memory, it can cause
        resource starvation; and in the presence of large databases,
        it can result in immense process sizes. In addition, because
        of the requirements of the Berkeley DB transactional
        implementation, only read-only files can be mapped into
        process memory.
    </p>
      <p>
        To specify that no files are to be mapped into the process
        address space, specify the <a href="../api_reference/C/dbopen.html#open_DB_NOMMAP" class="olink">DB_NOMMAP</a> flag to the
        <a href="../api_reference/C/envset_flags.html" class="olink">DB_ENV-&gt;set_flags()</a> method. To specify that any individual file
        should not be mapped into the process address space, specify
        the <a href="../api_reference/C/dbopen.html#open_DB_NOMMAP" class="olink">DB_NOMMAP</a> flag to the <a href="../api_reference/C/mempfopen.html" class="olink">DB_MPOOLFILE-&gt;open()</a> interface. To limit
        the size of files mapped into the process address space, use
        the <a href="../api_reference/C/envset_mp_mmapsize.html" class="olink">DB_ENV-&gt;set_mp_mmapsize()</a> method.
    </p>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="mp.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="mp.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="mp_warm.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Chapter 20.  The Memory Pool Subsystem  </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Warming the memory pool</td>
        </tr>
      </table>
    </div>
  </body>
</html>
